Functional Programming হল এমন একটি প্রোগ্রামিং প্যারাডাইম যেখানে ফাংশনগুলিকে প্রথম শ্রেণির নাগরিক হিসেবে ব্যবহার করা হয়, এবং স্টেট পরিবর্তনের চেয়ে ফাংশন কলের মাধ্যমে ডেটা প্রক্রিয়া করা হয়। Java 8 থেকে, Lambda Expressions যোগ করা হয়েছে, যা Java-তে ফাংশনাল প্রোগ্রামিং ধারণা আনার ক্ষেত্রে গুরুত্বপূর্ণ ভূমিকা পালন করেছে।
Lambda Expressions হল একটি সংক্ষিপ্তভাবে ফাংশনাল ইন্টারফেসগুলির জন্য ফাংশনাল ইমপ্লিমেন্টেশন। এটি সাধারণত functional interfaces (যেমন Runnable, Callable, Comparator ইত্যাদি) এর সাথে ব্যবহৃত হয় এবং anonymous function হিসেবে কাজ করে।
1. Lambda Expression এর ধারণা
Lambda Expressions হল এমন একটি ফিচার যা functional interface এর জন্য কোড লেখার একটি সংক্ষিপ্ত উপায়। এটি মূলত একটি অনননুমান ফাংশনাল ইন্টারফেস বাস্তবায়ন করে এবং এইভাবে callback functions এবং higher-order functions এর জন্য ব্যবহার করা যেতে পারে।
Lambda Expression-এর মাধ্যমে আপনি:
- ফাংশনাল ইন্টারফেসে নতুন আচরণ সংযুক্ত করতে পারেন।
- কোডের পুনরাবৃত্তি কমাতে এবং অ্যাপ্লিকেশনকে আরও পরিষ্কার করতে পারেন।
- প্রথাগত anonymous class গুলির পরিবর্তে কোড লেখা সহজ এবং সংক্ষিপ্ত করতে পারেন।
Lambda Expression কোডের একাংশ হিসেবে কাজ করে যা parameters গ্রহণ করে, body তে লজিক বাস্তবায়ন করে এবং ফলস্বরূপ return করে।
2. Lambda Expression এর Syntax
Lambda expression-এর মৌলিক সিঙ্কট্যাক্স হলো:
(parameters) -> expression
- parameters: ফাংশনের ইনপুট প্যারামিটারগুলির তালিকা (যেমন,
(x, y)বা শুধুমাত্র()যদি প্যারামিটার না থাকে)। - ->: এটি একটি separator যা parameter list এবং body কে আলাদা করে।
- expression: এটি Lambda এর body, যেখানে লজিক বা কোড রিটার্ন করা হয়।
Lambda Expression-এর Syntax আরো বিস্তারিতভাবে দুইটি অংশে বিভক্ত হতে পারে:
- Single Expression (একটি এক্সপ্রেশন): শুধুমাত্র এক লাইনে লজিক রিটার্ন করা হয়।
- Block Body (ব্লক বডি): একাধিক স্টেটমেন্ট বা একাধিক এক্সপ্রেশন দিয়ে একটি ব্লক রিটার্ন করা হয়।
3. Lambda Expression-এর উদাহরণ
1. Simple Lambda Expression (Single Expression)
একটি Lambda Expression যা দুটি সংখ্যার যোগফল প্রদান করবে:
(int a, int b) -> a + b
এখানে:
- (int a, int b) হল প্যারামিটারগুলি, যা int টাইপের দুইটি ইনপুট নিবে।
- a + b হল expression বা ফাংশনের বডি যা তাদের যোগফল প্রদান করবে।
এটি একটি functional interface বাস্তবায়ন করবে, যেমন:
interface Adder {
int add(int a, int b);
}
public class Main {
public static void main(String[] args) {
Adder adder = (a, b) -> a + b; // Lambda Expression
System.out.println(adder.add(5, 3)); // Output: 8
}
}
2. Lambda Expression with Block Body
যখন আপনি একাধিক স্টেটমেন্টের মাধ্যমে কিছু কাজ করতে চান, তখন block body ব্যবহার করতে হয়:
(int a, int b) -> {
int result = a + b;
return result;
}
এটি একাধিক স্টেটমেন্ট ব্যবহার করে একটি result গণনা করে এবং রিটার্ন করবে।
3. Lambda Expression with No Parameters
যদি ফাংশনে কোন ইনপুট প্যারামিটার না থাকে, তবে আপনি empty parentheses ব্যবহার করতে পারেন:
() -> System.out.println("Hello, World!")
এটি একটি প্যারামিটারহীন Lambda Expression যা "Hello, World!" মেসেজ প্রিন্ট করবে।
interface Greeter {
void greet();
}
public class Main {
public static void main(String[] args) {
Greeter greeter = () -> System.out.println("Hello, World!");
greeter.greet(); // Output: Hello, World!
}
}
4. Lambda Expression for Sorting Collections
Lambda expressions খুবই কার্যকরী যখন আপনাকে Collections (যেমন List) সাজাতে হয়। এখানে একটি Comparator ব্যবহার করা হয়েছে:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Adam", "Eve");
// Sort using Lambda Expression
Collections.sort(names, (a, b) -> a.compareTo(b));
System.out.println(names); // Output: [Adam, Eve, Jane, John]
}
}
এখানে, (a, b) -> a.compareTo(b) একটি Lambda Expression যা দুইটি স্ট্রিংয়ের মধ্যে তুলনা করে তাদের সঠিক অর্ডারে সাজায়।
4. Lambda Expression এর সুবিধা
- Compact Code: Lambda expressions কোডকে ছোট এবং পরিষ্কার করে। আপনি অ্যানোনিমাস ক্লাস ব্যবহার না করে কোড লেখা অনেক সহজ হয়।
- Higher-Order Functions: Lambda expressions আপনাকে higher-order functions তৈরি করতে দেয়, যেগুলি অন্য ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করতে পারে অথবা ফাংশনকে রিটার্ন করতে পারে।
- Functional Interfaces: Lambda expressions সাধারণত functional interfaces এর জন্য ব্যবহৃত হয়। এটি জাভাতে functional programming ধারণা ব্যবহারে সাহায্য করে।
- Parallel Processing: Java 8 থেকে Streams API-এর সাথে Lambda expressions ব্যবহার করে আপনি parallel ডেটা প্রক্রিয়াকরণ করতে পারেন, যা পারফরম্যান্স উন্নত করে।
5. Lambda Expression vs Anonymous Class
Lambda Expressions এবং Anonymous Classes মধ্যে কিছু পার্থক্য রয়েছে:
- Lambda Expression অনেক কম এবং পরিষ্কার কোড তৈরি করে, যেখানে Anonymous Class এর জন্য বেশি কোড লিখতে হয়।
- Lambda Expressions ফাংশনাল ইন্টারফেসের সাথে যুক্ত, কিন্তু Anonymous Classes সাধারণত শুধু ইন্টারফেসের জন্য ব্যবহৃত হয় না।
Anonymous Class Example:
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello, World!");
}
};
r.run();
Lambda Expression Example:
Runnable r = () -> System.out.println("Hello, World!");
r.run();
এখানে, Lambda Expression অনেক কম এবং সোজা কোড তৈরি করে।
Lambda Expressions Java 8-এ চালু হওয়া একটি শক্তিশালী ফিচার যা ফাংশনাল প্রোগ্রামিংয়ের ধারণাগুলিকে বাস্তবায়ন করতে সাহায্য করে। এর মাধ্যমে আপনি shorter, cleaner, এবং more efficient কোড লিখতে পারবেন। Lambda expressions ব্যবহার করে আপনি functional interfaces তৈরির মাধ্যমে ফাংশনাল প্রোগ্রামিং প্যাটার্নগুলো বাস্তবায়ন করতে পারবেন, যেমন map, filter, এবং reduce এর মতো ফাংশনাল অপারেশন। Java-তে Lambda expressions আপনাকে higher-order functions, parallel processing, এবং functional programming ধারণা ব্যবহারের সুযোগ দেয়।
Read more